---
title: ガードレール
description: Validate or transform agent input and output
---

import { Code } from '@astrojs/starlight/components';
import inputGuardrailExample from '../../../../../../examples/docs/guardrails/guardrails-input.ts?raw';
import outputGuardrailExample from '../../../../../../examples/docs/guardrails/guardrails-output.ts?raw';

ガードレールはエージェントと並行して実行することも、完了まで実行をブロックすることもでき、ユーザー入力やエージェント出力に対するチェックやバリデーションを行えます。たとえば高コストのモデルを呼び出す前に、軽量モデルをガードレールとして実行できます。ガードレールが悪意ある利用を検知した場合は、エラーを発生させて高コストなモデルの実行を停止できます。

ガードレールには 2 種類あります:

1. **入力ガードレール** は初回のユーザー入力に対して実行されます
2. **出力ガードレール** は最終的なエージェント出力に対して実行されます

## 入力ガードレール

入力ガードレールは 3 段階で実行されます:

1. ガードレールはエージェントに渡されたのと同じ入力を受け取ります
2. ガードレール関数が実行され、[`GuardrailFunctionOutput`](/openai-agents-js/openai/agents/interfaces/guardrailfunctionoutput) を [`InputGuardrailResult`](/openai-agents-js/openai/agents/interfaces/inputguardrailresult) にラップして返します
3. `tripwireTriggered` が `true` の場合、[`InputGuardrailTripwireTriggered`](/openai-agents-js/openai/agents/classes/inputguardrailtripwiretriggered) エラーがスローされます

> **注意**
> 入力ガードレールはユーザー入力を想定しているため、ワークフローでエージェントが最初のエージェントの場合にのみ実行されます。ガードレールはエージェントごとに設定します。異なるエージェントでは異なるガードレールが必要になることが多いためです。

### 実行モード

- `runInParallel: true`（既定）は、ガードレールを LLM/ ツール呼び出しと並行して開始します。レイテンシーを最小化できますが、ガードレールが後からトリガーされた場合でも、モデルがすでにトークンを消費したりツールを実行している可能性があります
- `runInParallel: false` は、モデルを呼び出す前にガードレールを実行し、ガードレールがリクエストをブロックする際にトークン消費やツール実行を防ぎます。レイテンシーより安全性とコストを優先したい場合に使用します

## 出力ガードレール

出力ガードレールは 3 段階で実行されます:

1. ガードレールはエージェントが生成した出力を受け取ります
2. ガードレール関数が実行され、[`GuardrailFunctionOutput`](/openai-agents-js/openai/agents/interfaces/guardrailfunctionoutput) を [`OutputGuardrailResult`](/openai-agents-js/openai/agents/interfaces/outputguardrailresult) にラップして返します
3. `tripwireTriggered` が `true` の場合、[`OutputGuardrailTripwireTriggered`](/openai-agents-js/openai/agents/classes/outputguardrailtripwiretriggered) エラーがスローされます

> **注意**
> 出力ガードレールは、ワークフローでエージェントが最後のエージェントの場合にのみ実行されます。リアルタイム音声でのやり取りについては[音声エージェントの構築](/openai-agents-js/ja/guides/voice-agents/build#guardrails)を参照してください。

## トリップワイヤー

ガードレールが失敗すると、トリップワイヤーでそれを通知します。トリップワイヤーがトリガーされるとすぐに、Runner は対応するエラーをスローして実行を停止します。

## ガードレールの実装

ガードレールは `GuardrailFunctionOutput` を返す単純な関数です。以下は、別のエージェントを内部で実行して、ユーザーが数学の宿題の手助けを求めているかを確認する最小の例です。

<Code
  lang="typescript"
  code={inputGuardrailExample}
  title="入力ガードレールの例"
/>

出力ガードレールも同様に動作します。

<Code
  lang="typescript"
  code={outputGuardrailExample}
  title="出力ガードレールの例"
/>

1. `guardrailAgent` はガードレール関数の内部で使用します
2. ガードレール関数はエージェントの入力または出力を受け取り、その結果を返します
3. 追加情報をガードレール結果に含めることができます
4. `agent` はガードレールを適用する実際のワークフローを定義します
